#include<stdio.h>
//
//int removeDuplicates(int* nums, int numsSize)
//{
//    int* begin = nums;
//    int* src = &nums[1];
//    int* dest = nums;
//
//    while (src < nums + numsSize)
//    {
//        if (*src == *dest)
//        {
//            src++;
//        }
//        else
//        {
//            *++dest = *src++;
//        }
//    }
//
//    return dest - begin+1;
//}
//
//int main()
//{
//    int arr[3] = { 1,1,2 };
//    printf("%d\n",removeDuplicates(arr, 3));
//
//    return 0;
//}
//
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
//{
//    int* end1 = nums1 + m - 1;
//    int* end2 = nums2 + n - 1;
//    int* dest = nums1 + m + n - 1;
//
//    while (end1 >= nums1 && end2 >= nums2)
//    {
//        if (*end1 >= *end2)
//        {
//            *dest-- = *end1--;
//        }
//        else
//        {
//            *dest-- = *end2--;
//        }
//    }
//
//    while (end1 >= nums1)
//    {
//        *dest-- = *end1--;
//    }
//
//    return nums1;
//}

//
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
//{
//    int end1 = m - 1;
//    int end2 = n - 1;
//    int dest = m + n - 1;
//
//    if (end1 < 0)
//        end1 = 0;
//
//    if (end2 < 0)
//        end2 = 0;
//
//    while (end1 >= 0 && end2 >= 0)
//    {
//        if (nums1[end1] >= nums2[end2])
//        {
//            nums1[dest--] = nums1[end1--];
//        }
//        else
//        {
//            nums1[dest--] = nums2[end2--];
//        }
//    }
//
//    while (end1 >= 0)
//    {
//        nums1[dest--] = nums1[end1--];
//    }
//}
//
//int main()
//{
//    int nums1[] = {1,2,3,0,0,0};
//    int nums2[] = { 2,5,6 };
//    merge(nums1, 6, 3, nums2, 3, 3);
//
//    return 0;
//}


 struct ListNode 
 {
      int val;
      struct ListNode *next;
 };
 

struct ListNode* removeElements(struct ListNode* head, int val)
{
    struct ListNode* cur = head;
    while (cur)
    {
        if (cur->val = val)
        {
            struct ListNode* next = cur->next;
            free(cur);
            cur = next;
        }
    }

    return head;
}